#include <SDL2/SDL_stdinc.h>

#include "fpga.h"
#include "i2c.h"

#define I2C_ADDR    0x3C

static int i2c_write_data(uint8_t *data, int length)
{
    i2c_t *i2c;
    i2c = i2c_new();

    /* Open the i2c-0 bus */
    if (i2c_open(i2c, "/dev/i2c-1") < 0) {
        fprintf(stderr, "i2c_open(): %s\n", i2c_errmsg(i2c));
        i2c_free(i2c);
        return -1;
    }

    struct i2c_msg msgs[1] =
        {
            { .addr = I2C_ADDR, .flags = 0, .len = length, .buf = data },
        };

    /* Transfer a transaction with two I2C messages */
    if (i2c_transfer(i2c, msgs, 1) < 0) {
        fprintf(stderr, "i2c_transfer(): %s\n", i2c_errmsg(i2c));
        i2c_close(i2c);
        i2c_free(i2c);
        return -1;
    }

    i2c_close(i2c);
    i2c_free(i2c);

    return 0;
}

/* 快门校正 */
int HAL_FPGA_shutter_cal(void)
{
    uint8_t cmd[20] = {0x1D, 0x00, 0x10, 0x02, 0x43, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xCF, 0xC8};
    return i2c_write_data(cmd, sizeof(cmd));
}

/* 背景校正 */
int HAL_FPGA_background_cal(void)
{
    uint8_t cmd[20] = {0x1D, 0x00, 0x01, 0x10, 0x52, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x24, 0xFD};
    return i2c_write_data(cmd, sizeof(cmd));
}

/* 快门开关 */
int HAL_FPGA_shutter_onoff(int onoff)
{
    uint8_t cmd[2][20] = {
        {0x1D, 0x00, 0x01, 0x0F, 0x45, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8D, 0x5A},   // 关闭快门
        {0x1D, 0x00, 0x01, 0x0F, 0x45, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF8, 0x59}    // 开启快门
    };
    return i2c_write_data(cmd[onoff], 20);
}

int HAL_FPGA_auto_shutter(int onoff)
{
    uint8_t cmd[2][20] = {
        {0x1D, 0x00, 0x10, 0x02, 0x41, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0D, 0x3E},
        {0x1D, 0x00, 0x10, 0x02, 0x41, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x78, 0x3D}
    };
    return i2c_write_data(cmd[onoff], 20);
}

/*
 * 机芯休眠唤醒
 * 0：休眠，1：唤醒
 */
int HAL_FPGA_standby(int onoff)
{
    uint8_t cmd[2][20] = {
        {0x1D, 0x00, 0x10, 0x10, 0x48, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x21, 0xAE},   // 休眠
        {0x1D, 0x00, 0x10, 0x10, 0x48, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x54, 0xAD},   // 唤醒
    };
    return i2c_write_data(cmd[onoff], 20);
}

int HAL_FPGA_para_save(void)
{
    uint8_t cmd[20] = {0x1D, 0x00, 0x10, 0x10, 0x51, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xA9, 0xFB};
    return i2c_write_data(cmd, sizeof(cmd));
}

int HAL_FPGA_para_recover(void)
{
    uint8_t cmd[20] = {0x1D, 0x00, 0x10, 0x10, 0x52, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0A, 0x76};
    return i2c_write_data(cmd, sizeof(cmd));
}

int HAL_FPGA_mirror(int onoff)
{
    uint8_t cmd[2][20] = {
        {0x1D, 0x00, 0x10, 0x10, 0x43, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x9C, 0xCB},
        {0x1D, 0x00, 0x10, 0x10, 0x43, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE9, 0xC8}
    };
    return i2c_write_data(cmd[onoff], 20);
}

int HAL_FPGA_flip(int onoff)
{
    uint8_t cmd[2][20] = {
        {0x1D, 0x00, 0x10, 0x10, 0x43, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x9C, 0xCB},
        {0x1D, 0x00, 0x10, 0x10, 0x43, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x76, 0xCD}
    };
    return i2c_write_data(cmd[onoff], 20);
}

int HAL_FPGA_colormode(int value)
{
    uint8_t cmd[][20] = {
        {0x1D, 0x00, 0x10, 0x03, 0x45, 0x00, 0x00, 0x0A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x69, 0x6F},   // 黑热
        {0x1D, 0x00, 0x10, 0x03, 0x45, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x54, 0x6D},   // 白热
        // {0x1D, 0x00, 0x10, 0x03, 0x45, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE7, 0xCD},   // 辉金
        {0x1D, 0x00, 0x10, 0x03, 0x45, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE9, 0x44},   // 红热
        {0x1D, 0x00, 0x10, 0x03, 0x45, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x13, 0x3C},   // 彩虹
        {0x1D, 0x00, 0x10, 0x03, 0x45, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xAE, 0x15},   // 铁红
        {0x1D, 0x00, 0x10, 0x03, 0x45, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5A, 0xE4},   // 微光
        // {0x1D, 0x00, 0x10, 0x03, 0x45, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xA0, 0x9C},   // 极光
        // {0x1D, 0x00, 0x10, 0x03, 0x45, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xDA, 0xCF},   // 丛林
        // {0x1D, 0x00, 0x10, 0x03, 0x45, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x93, 0x17},   // 医疗
        // {0x1D, 0x00, 0x10, 0x03, 0x45, 0x00, 0x00, 0x0B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0xB7},   // 金红
    };
    return i2c_write_data(cmd[value], 20);
}

int HAL_FPGA_detail_enhance(int value)
{
    uint8_t cmd[][20] = {
        {0x1D, 0x00, 0x10, 0x04, 0x45, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC3, 0x15},   // 0档
        {0x1D, 0x00, 0x10, 0x04, 0x45, 0x00, 0x0A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x81, 0x08},   // 10档
        {0x1D, 0x00, 0x10, 0x04, 0x45, 0x00, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x2F},   // 20档
        {0x1D, 0x00, 0x10, 0x04, 0x45, 0x00, 0x1E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x32},   // 30档
        {0x1D, 0x00, 0x10, 0x04, 0x45, 0x00, 0x28, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xCB, 0x60},   // 40档
        {0x1D, 0x00, 0x10, 0x04, 0x45, 0x00, 0x32, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xD9, 0x4A},   // 50档
        {0x1D, 0x00, 0x10, 0x04, 0x45, 0x00, 0x3C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4F, 0x5A},   // 60档
        {0x1D, 0x00, 0x10, 0x04, 0x45, 0x00, 0x46, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xBD, 0xC3},   // 70档
        {0x1D, 0x00, 0x10, 0x04, 0x45, 0x00, 0x50, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xD3, 0xFF},   // 80档
        {0x1D, 0x00, 0x10, 0x04, 0x45, 0x00, 0x5A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x91, 0xE2},   // 90档
        {0x1D, 0x00, 0x10, 0x04, 0x45, 0x00, 0x64, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF7, 0xAB},   // 100档
    };
    return i2c_write_data(cmd[value], 20);
}

int HAL_FPGA_brightness(int value)
{
    uint8_t cmd[][20] = {
        {0x1D, 0x00, 0x10, 0x04, 0x47, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xE3},   // 0档
        {0x1D, 0x00, 0x10, 0x04, 0x47, 0x00, 0x0A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x43, 0xFE},   // 10档
        {0x1D, 0x00, 0x10, 0x04, 0x47, 0x00, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x85, 0xD9},   // 20档
        {0x1D, 0x00, 0x10, 0x04, 0x47, 0x00, 0x1E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC7, 0xC4},   // 30档
        {0x1D, 0x00, 0x10, 0x04, 0x47, 0x00, 0x28, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0x96},   // 40档
        {0x1D, 0x00, 0x10, 0x04, 0x47, 0x00, 0x32, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1B, 0xBC},   // 50档
        {0x1D, 0x00, 0x10, 0x04, 0x47, 0x00, 0x3C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8D, 0xAC},   // 60档
        {0x1D, 0x00, 0x10, 0x04, 0x47, 0x00, 0x46, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7F, 0x35},   // 70档
        {0x1D, 0x00, 0x10, 0x04, 0x47, 0x00, 0x50, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x09},   // 80档
        {0x1D, 0x00, 0x10, 0x04, 0x47, 0x00, 0x5A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x53, 0x14},   // 90档
        {0x1D, 0x00, 0x10, 0x04, 0x47, 0x00, 0x64, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x35, 0x5D},   // 100档
    };
    return i2c_write_data(cmd[value], 20);
}

int HAL_FPGA_contrast(int value)
{
    uint8_t cmd[][20] = {
        {0x1D, 0x00, 0x10, 0x04, 0x4A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xAE, 0x8E},   // 0档
        {0x1D, 0x00, 0x10, 0x04, 0x4A, 0x00, 0x0A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xEC, 0x93},   // 10档
        {0x1D, 0x00, 0x10, 0x04, 0x4A, 0x00, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2A, 0xB4},   // 20档
        {0x1D, 0x00, 0x10, 0x04, 0x4A, 0x00, 0x1E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x68, 0xA9},   // 30档
        {0x1D, 0x00, 0x10, 0x04, 0x4A, 0x00, 0x28, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xA6, 0xFB},   // 40档
        {0x1D, 0x00, 0x10, 0x04, 0x4A, 0x00, 0x32, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xB4, 0xD1},   // 50档
        {0x1D, 0x00, 0x10, 0x04, 0x4A, 0x00, 0x3C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x22, 0xC1},   // 60档
        {0x1D, 0x00, 0x10, 0x04, 0x4A, 0x00, 0x46, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xD0, 0x58},   // 70档
        {0x1D, 0x00, 0x10, 0x04, 0x4A, 0x00, 0x50, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xBE, 0x64},   // 80档
        {0x1D, 0x00, 0x10, 0x04, 0x4A, 0x00, 0x5A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFC, 0x79},   // 90档
        {0x1D, 0x00, 0x10, 0x04, 0x4A, 0x00, 0x64, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x9A, 0x30},   // 100档
    };
    return i2c_write_data(cmd[value], 20);
}

int HAL_FPGA_time_domain_denoise(int value)
{
    uint8_t cmd[][20] = {
        {0x1D, 0x00, 0x10, 0x04, 0x4B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xCF, 0xF5},   // 0档
        {0x1D, 0x00, 0x10, 0x04, 0x4B, 0x00, 0x0A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8D, 0xE8},   // 10档
        {0x1D, 0x00, 0x10, 0x04, 0x4B, 0x00, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4B, 0xCF},   // 20档
        {0x1D, 0x00, 0x10, 0x04, 0x4B, 0x00, 0x1E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0xD2},   // 30档
        {0x1D, 0x00, 0x10, 0x04, 0x4B, 0x00, 0x28, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC7, 0x80},   // 40档
        {0x1D, 0x00, 0x10, 0x04, 0x4B, 0x00, 0x32, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xD5, 0xAA},   // 50档
        {0x1D, 0x00, 0x10, 0x04, 0x4B, 0x00, 0x3C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x43, 0xBA},   // 60档
        {0x1D, 0x00, 0x10, 0x04, 0x4B, 0x00, 0x46, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xB1, 0x23},   // 70档
        {0x1D, 0x00, 0x10, 0x04, 0x4B, 0x00, 0x50, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xDF, 0x1F},   // 80档
        {0x1D, 0x00, 0x10, 0x04, 0x4B, 0x00, 0x5A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x9D, 0x02},   // 90档
        {0x1D, 0x00, 0x10, 0x04, 0x4B, 0x00, 0x64, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFB, 0x4B},   // 100档
    };
    return i2c_write_data(cmd[value], 20);
}

int HAL_FPGA_Space_domain_denoise(int value)
{
    uint8_t cmd[][20] = {
        {0x1D, 0x00, 0x10, 0x04, 0x4C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC9, 0x85},   // 0档
        {0x1D, 0x00, 0x10, 0x04, 0x4C, 0x00, 0x0A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8B, 0x98},   // 10档
        {0x1D, 0x00, 0x10, 0x04, 0x4C, 0x00, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4D, 0xBF},   // 20档
        {0x1D, 0x00, 0x10, 0x04, 0x4C, 0x00, 0x1E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0F, 0xA2},   // 30档
        {0x1D, 0x00, 0x10, 0x04, 0x4C, 0x00, 0x28, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC1, 0xF0},   // 40档
        {0x1D, 0x00, 0x10, 0x04, 0x4C, 0x00, 0x32, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xD3, 0xDA},   // 50档
        {0x1D, 0x00, 0x10, 0x04, 0x4C, 0x00, 0x3C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x45, 0xCA},   // 60档
        {0x1D, 0x00, 0x10, 0x04, 0x4C, 0x00, 0x46, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xB7, 0x53},   // 70档
        {0x1D, 0x00, 0x10, 0x04, 0x4C, 0x00, 0x50, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xD9, 0x6F},   // 80档
        {0x1D, 0x00, 0x10, 0x04, 0x4C, 0x00, 0x5A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x9B, 0x72},   // 90档
        {0x1D, 0x00, 0x10, 0x04, 0x4C, 0x00, 0x64, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD, 0x3B},   // 100档
    };
    return i2c_write_data(cmd[value], 20);
}

int HAL_FPGA_gamma(int value)
{
    uint8_t cmd[][20] = {
        {0x1D, 0x00, 0x10, 0x04, 0x4D, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xA8, 0xFE},   // 0档
        {0x1D, 0x00, 0x10, 0x04, 0x4D, 0x00, 0x0A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xEA, 0xE3},   // 10档
        {0x1D, 0x00, 0x10, 0x04, 0x4D, 0x00, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2C, 0xC4},   // 20档
        {0x1D, 0x00, 0x10, 0x04, 0x4D, 0x00, 0x1E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6E, 0xD9},   // 30档
        {0x1D, 0x00, 0x10, 0x04, 0x4D, 0x00, 0x28, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xA0, 0x8B},   // 40档
        {0x1D, 0x00, 0x10, 0x04, 0x4D, 0x00, 0x32, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xB2, 0xA1},   // 50档
        {0x1D, 0x00, 0x10, 0x04, 0x4D, 0x00, 0x3C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x24, 0xB1},   // 60档
        {0x1D, 0x00, 0x10, 0x04, 0x4D, 0x00, 0x46, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xD6, 0x28},   // 70档
        {0x1D, 0x00, 0x10, 0x04, 0x4D, 0x00, 0x50, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xB8, 0x14},   // 80档
        {0x1D, 0x00, 0x10, 0x04, 0x4D, 0x00, 0x5A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFA, 0x09},   // 90档
        {0x1D, 0x00, 0x10, 0x04, 0x4D, 0x00, 0x64, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x9C, 0x40},   // 100档
    };
    return i2c_write_data(cmd[value], 20);
}